package org.jcodetools.http.url._short;

import org.jcodetools.collection.CollectionUtils;
import org.jcodetools.http.request.HttpClientUtils;
import org.jcodetools.security.md5.MD5;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Map.Entry;

/**
 * 短地址生成工具。
 * 使用方法：
 * <pre>
 * Map<String, String> parmas = new HashMap<>();
 * parmas.put("appkey", appkey);
 * parmas.put("long_url", longUrl);
 * String responseText = ShortUrlUtils.parse(parmas);
 * System.out.println(responseText);
 *
 * 参数说明：
 * appkey：检验码
 * long_url：您的网址
 *
 * 默认使用http://www.mynb8.com站点服务，您需要在该站点上注册并获取appkey值。
 *
 * 温馨提示：您也可以不使用默认提供的服务。这时候您需要根据您使用的服务规则，调用HTTP请求接口即可。
 * http请求接口：
 * POST：org.jcodetools.http.request.HttpClientUtils#doPost(java.lang.String, java.util.Map, java.lang.String)
 * GET：org.jcodetools.http.request.HttpClientUtils#doGet(java.lang.String, java.lang.String)
 * </pre>
 * <p>
 * Created by 熊彦 on 2017-09-28.
 *
 * @since org.jcodetools.collection.CollectionUtils <br/>
 * org.jcodetools.http.request.HttpClientUtils<br/>
 * org.jcodetools.security.md5.MD5
 */
public class ShortUrlUtils {
    private static String sinaApi = "http://www.mynb8.com/api/sina";

    /**
     * 将长网址解析为短网址
     *
     * @param params 参数
     * @return 返回响应数据，格式为json字符串
     */
    public static String parse(Map<String, String> params) {
        if (CollectionUtils.isEmpty(params)) return "URL参数不能为空";

        StringBuilder url = new StringBuilder();
        url.append(sinaApi).append("?");
        String longUrl = "";
        
        try {
            longUrl = URLEncoder.encode(params.get("long_url"), "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        for (Entry<String, String> entry : params.entrySet()) {
            if (entry.getKey().equals("appkey"))
                url.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
            if (entry.getKey().equals("long_url"))
                url.append(entry.getKey()).append("=").append(longUrl).append("&");
        }
        url.append("sign=").append(MD5.encode(params.get("appkey") + MD5.encode(longUrl)));

        return HttpClientUtils.doGet(url.toString(), "UTF-8");
    }

}
